package aplicacio;

import com.db4o.Db4o;
import com.db4o.ObjectContainer;
import com.db4o.config.Configuration;
import com.db4o.query.Predicate;
import domini.Ocupacio;
import domini.Plasa;
import java.util.ArrayList;
import java.util.List;
import library.inout.Terminal;


// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.B545835B-E880-8A2D-84F7-56FDCC3EA2C9]
// </editor-fold> 
public class CU05 {

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.4FFB872A-CF4A-400C-0F2C-8522668B108B]
    // </editor-fold> 
    private void gestionarCasUs () {
        Terminal.print("\n\nCu05: Ocupar a una plaça\n\n");
        Configuration conf = Db4o.configure();
        conf.objectClass("domini.Plasa").cascadeOnUpdate(true);
        ObjectContainer objectContainer = Db4o.openFile("parking.yap");
        final int eoid = Terminal.readInt("Eoid de la plaça ? ");
        Predicate<Plasa> predicat = new Predicate<Plasa>() {

            public boolean match(Plasa plaça) {

                boolean cond = plaça.getEoid() == eoid;
                return cond;
            }
        };
        List<Plasa> places = objectContainer.query(predicat);
        Plasa plasaActivada = places.get(0);
        ArrayList<Ocupacio> ocupacions = plasaActivada.getOcupacions();
        if (ocupacions.isEmpty()) {  // Primera ocupació de la plaça
            String sdtInici = Terminal.read("Instant de l'inici de l'ocupació de la plaça ? ");
            Ocupacio novaOcupacio = new Ocupacio(sdtInici);
            plasaActivada.getOcupacions().add(novaOcupacio);
            objectContainer.set(plasaActivada);
            Terminal.print("La plaça ha sigut ocupada per primera vegada");
        } else {
            int indexMaxim = ocupacions.size() - 1;
            Ocupacio ultimaOcupacio = ocupacions.get(indexMaxim);
            if (ultimaOcupacio.getDtFi() != null) {
                String sdtInici = Terminal.read("Instant de l'inici de l'ocupació de la plaça ? ");
                Ocupacio novaOcupacio = new Ocupacio(sdtInici);
                plasaActivada.getOcupacions().add(novaOcupacio);
                objectContainer.set(plasaActivada);
                Terminal.print("La plaça ha sigut ocupada\n");
            } else {
                Terminal.print("La plaça no ha sigut ocupada doncs ja n'estaba\n");
            }
        }
        objectContainer.close();
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.BDDFBE87-F805-0397-9DF7-1F98145633E1]
    // </editor-fold> 
    public static void main (String[] args) {
        CU05 cu = new CU05();
        cu.gestionarCasUs();
    }
}

